import moment from 'moment';
import cookie from 'js-cookie';
import detector from 'detector';
import { report } from '@/services/udc';
import { getNetworkType, guid } from '@/utils/utils';

/**
 *
 * @param {String} eventName 事件名称
 * @param {String} pageName 页面名称
 * @param {Object} eventProps 事件属性
 */
export const eventTrack = ({ eventName = '', pageName, eventProps = {} }) => {
    // 读取本地存储的一些信息
    const user = JSON.parse(localStorage.getItem('user') || '{}');
    const pageTrack = JSON.parse(localStorage.getItem('pageTrack') || '{}');
    const JSESSIONID = cookie.get('JSESSIONID');
    const { userCode } = user;

    // 埋点要求的参数，没办法获取的传null
    const defaultParams = {
        deviceId: null, // 设备ID
        userCode: userCode || null, // 用户ID
        pageName: pageName || pageTrack.pageName || document.title || null, // 当前页面名称
        eventName: eventName || null, // 事件名称
        eventDate: moment(new Date()).format('YYYY-MM-DD'), // 事件日期
        eventTimestamp: moment(new Date()).format('x'), // 事件时间戳
        appKey: 1, // app唯一标识
        appName: 'VV WORK', // 应用名
        appVersion: null, // 应用版本
        platform: 'web', // 平台
        deviceCategory: 'pc', // 设备类型
        deviceOsName: detector.os.name !== 'na' ? detector.os.name : null, // 设备操作系统名称
        deviceOsVersion: detector.os.fullVersion !== '-1' ? detector.os.fullVersion : null, // 设备操作系统版本
        deviceOsLanguage: navigator.language, // 设备操作系统语言  这个取的是浏览器的语言并不是系统的语言
        deviceBrowser: detector.browser.name !== 'na' ? detector.browser.name : null, // 浏览器
        deviceBrowserVersion: detector.browser.fullVersion !== '-1' ? detector.browser.fullVersion : null, // 浏览器版本
        deviceScreenHeight: window.screen.height, // 屏幕高度
        deviceScreenWidth: window.screen.width, // 屏幕高度
        device_network_type: getNetworkType() // 网络类型
    };

    const eventProperty = {
        session_id: JSESSIONID || null, // 会话ID
        last_page_name: pageTrack.lastPageName || null, // 上个页面名称
        referer: pageTrack.lastPageUrl || null, // 前一个页面链接
        url: pageTrack.url || window.location.href // 页面URL
    };

    const fetchData = async params => {
        await report({ ...params });
    };
    // 赋值
    fetchData({
        ...defaultParams,
        content: JSON.stringify({ ...eventProperty, ...eventProps })
    });
};

/**
 * 生成浏览器会话id，关闭浏览器后自动清除
 */
export const trackSessionID = () => {
    if (!cookie.get('JSESSIONID')) {
        cookie.set('JSESSIONID', guid());
    }
};
